Previous approaches to learning a model involve space-partitioning the database so that it can subsequently be searched faster for answering a query. Space-partitioning methods including kd-trees, metric trees, M-trees, R*-trees, vp-trees, vantage point trees, vantage point forests, multi-vantage point trees, bisector trees, Orchard's algorithm, random projections, fixed queries trees, Voronoi trees, BBD-trees, min-wise independent permutations, Burkhard-Keller trees, generalized hyper-plane trees, geometric near-neighbor access trees (GNAT), and spatial approximation trees (SAT). Unfortunately, space partitioning does not scale up as the number of dimensions (i.e., columns) grows. This is because the number of partitions per node is typically 2n where n is the number of dimensions. Another problem with space-partitioning methods is that they require sorting the database, which can be time-consuming with large databases. Finally, space-partitioning methods cannot handle missing data nor can they extrapolate beyond or interpolate between rows in the database.